import { COLOR } from '../color'
import { stylePresets } from '../styleClass/presets'

import type { StyleTypes } from '../../types/styleTypes'

export { type StyleTypes, COLOR, check, preset }

/** 开发调试用工具函数，为preset的单位及颜色提供类型检查和提示 */
function check<
  U extends { [k: string]: StyleTypes.NBS },
  C extends { [k: string]: StyleTypes.ColorType }
>(params: StyleTypes.Preset<U, C>) {
  return params
}

/** 开发调试用工具函数，根据名称提示自定义的单位及颜色 */
function preset<N extends keyof typeof stylePresets>(
  name: N,
  params?: {
    unit?: Partial<Record<keyof (typeof stylePresets)[N]['unit'], StyleTypes.NBS>>
    color?: Partial<Record<keyof (typeof stylePresets)[N]['color'], StyleTypes.ColorType>>
  }
): StyleTypes.CustomPreset {
  return { name, params }
}

// /** 工具函数，提示和检查自定义的单位及颜色，返回floor[]参数 */
// function preset<
//   U extends { [k: string]: StyleTypes.NBS },
//   C extends { [k: string]: StyleTypes.ColorType }
// >(
//   floorPreset: StyleTypes.preset<U, C>,
//   params?: {
//     unit?: Partial<Record<keyof U, StyleTypes.NBS>>
//     color?: Partial<C>
//   }
// ): StyleTypes.preset<U, C> {
//   return {
//     floor: floorPreset.floor,
//     unit: Object.assign({ ...floorPreset.unit }, params?.unit),
//     color: Object.assign({ ...floorPreset.color }, params?.color),
//   }
// }
